home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <egb.h>
-
- extern char *work;
-
-
- // 47a VC3 regs指定
- // 47c VC3 regsデータ内容指定
- // 47d VC3 regsデータ内容指定
- // 47e VC3 regsデータ内容指定
- // 47f VC3 regsデータ内容指定
-
- // VC3 regs
- // 2000 色数
- // 2010 ビデオ表示開始/表示状態取得/表示フィールド/指定
- // 47e bit2-3 表示フィールド指定
- // 47e bit0 表示開始
- // 2011 表示倍率指定
- // 47c 倍率指定
- // 47d 倍率指定
- // 2027 ソースビデオ映像のx1
- // 2028 ソースビデオ映像のx2
- // 2029 ソースビデオ映像のy1
- // 202a ソースビデオ映像のy2
- // 202b 表示開始位置のx
- // 202c 表示開始位置のy
- // 202d vramオフセット(1ラインのバイト数)
- //
-
- /***********************
- void set_mid(int sw)
- {
- int i;
- outp(0x47d,0x11);
-
- outpw(0x47a,0x2010);
- i = inp(0x47c) & 0x7f;
- outp(0x47c,i);
- outp(0x47c,0);
- outp(0x47c,0x80);
- outp(0x47f,0);
-
- switch(sw){
- case 0:
- i = 4;
- break;
- case 1:
- i = 0;
- break;
- case 2:
- i = 8;
- break;
- }
- outp(0x47e,i);
-
-
- outpw(0x47a,0x2011);
- outp(0x47c,0);
- outp(0x47d,0x80);
- outp(0x47f,9);
-
- outpw(0x47a,0x2020);
- outpw(0x47c,0xfb7);
-
- outpw(0x47a,0x2022);
- outpw(0x47c,0x137);
-
- outpw(0x47a,0x2023);
- outpw(0x47c,0x7ff);
-
- outpw(0x47a,0x2024);
- outpw(0x47c,0xff1);
-
- outpw(0x47a,0x2026);
- outpw(0x47c,0x7ff);
-
- outpw(0x47a,0x2027);
- outpw(0x47c,0);
-
- outpw(0x47a,0x2028);
- outpw(0x47c,0x27f);
-
- outpw(0x47a,0x2029);
- outpw(0x47c,0);
-
- outpw(0x47a,0x202a);
- outpw(0x47c,0xef);
-
- outpw(0x47a,0x202b);
- outpw(0x47c,0);
-
- outpw(0x47a,0x202c);
- outpw(0x47c,0);
-
- outpw(0x47a,0x202d);
- outpw(0x47c,0x200);
-
- outpw(0x47a,0x2010);
- i = inp(0x47e) | 1;
- outp(0x47e,i);
-
- }
- *************************/
- void set_high(int sw,int sw2)
- {
- int i;
- outpw(0x47a,0);
- outp(0x47d,2);
-
- outpw(0x47a,0x2000);
- outp(0x47c,1);
- i = inp(0x47c) & 0x80;
-
- outp(0x47d,0x11);
- outp(0x47f,9);
-
- outpw(0x47a,0x2010);
- i = inp(0x47c) & 0x7f;
- outp(0x47c,i);
- outp(0x47c,0);
- outp(0x47c,0x80);
- outp(0x47f,0);
-
- /* 高解像度時の表示モード設定 */
-
- switch(sw){
- case 0: /* 奇数/偶数両フィールド表示 */
- i = 4;
- break;
- case 1: /* 奇数フィールド表示 */
- i = 0;
- break;
- case 2: /* 偶数フィールド表示 */
- i = 8;
- break;
- case 3: /* フレーム表示 */
- i = 12;
- break;
- }
- outp(0x47e,i);
-
-
- outpw(0x47a,0x2011);
- outp(0x47f,9);
-
- /* 高解像度時の表示サイズ */
- switch(sw2){
- case 0: /* 切り抜き表示(画面中央の512×384) */
- outp(0x47c,0);
- outp(0x47d,0);
- break;
- case 1: /* 縮小表示(512×384に間引き縮小) */
- outp(0x47c,0xcd);
- outp(0x47d,0xcd);
- break;
- case 2: /* 縮小表示(320×240に縮小) */
- outp(0x47c,0);
- outp(0x47d,0x80);
- break;
- }
-
-
- outpw(0x47a,0x2020);
- outpw(0x47c,0xfb4);
-
- outpw(0x47a,0x2022);
- outpw(0x47c,0x137);
-
- outpw(0x47a,0x2023);
- outpw(0x47c,0x7ff);
-
- outpw(0x47a,0x2024);
- outpw(0x47c,0xfef);
-
- outpw(0x47a,0x2026);
- outpw(0x47c,0x7ff);
-
- if (sw2==0) { /* 切り抜き表示(画面中央の512×384) */
-
- outpw(0x47a,0x2027);
- outpw(0x47c,0x40); /* x1 */
-
- outpw(0x47a,0x2028);
- outpw(0x47c,0x23f); /* x2 */
-
- outpw(0x47a,0x2029);
- outpw(0x47c,0x18); /* y1 */
-
- outpw(0x47a,0x202a);
- outpw(0x47c,0xd7); /* y2 */
-
- }else{
- outpw(0x47a,0x2027);
- outpw(0x47c,0);
-
- outpw(0x47a,0x2028);
- outpw(0x47c,0x27f);
-
- outpw(0x47a,0x2029);
- outpw(0x47c,0);
-
- outpw(0x47a,0x202a);
- outpw(0x47c,0xef);
- }
- /********
- if (sw2==2) {
-
- outpw(0x47a,0x202b);
- outpw(0x47c,0x60);
-
- outpw(0x47a,0x202c);
- outpw(0x47c,0x48);
-
- }else{
- ********/
-
- outpw(0x47a,0x202b);
- outpw(0x47c,0x60*2);
-
- outpw(0x47a,0x202c);
- outpw(0x47c,0);
- /********
- }
- ********/
-
- outpw(0x47a,0x202d);
- outpw(0x47c,0x200);
-
- outpw(0x47a,0x2010);
- i = inp(0x47e) | 1;
- outp(0x47e,i);
-
- }
-
- int vc3_check()
- {
- int i;
-
- i = inp(0x479) & 0x40;
- if (i!=0) return 1;
-
- outpw(0x47A,0x2000);
- i = inp(0x47c) & 1;
- if (i!=1) return 1;
-
- outpw(0x50a0,4);
- i = inp(0x50a2) & 0x80;
- if (i!=0) return 1;
-
- return 0;
- }
- int vbus_check()
- {
- int i;
-
- outpw(0x47A,0x2010);
- i = inp(0x47E) & 1;
- return i;
- }
-
- void reset_vbus()
- {
- int i;
-
- outpw(0x47A,0x2010);
- outp(0x47F,2);
-
- i=0;
- while(i<1000000 && ((inp(0x47E) & 1) != 0)) i++;
-
- outp(0x47F,0);
- outpw(0x47A,0x2000);
- outp(0x47C,1);
- }
-
- /**************
- void set_vbus()
- {
- int i;
-
- outpw(0x47A,0);
- outp(0x47C,2);
- outpw(0x47A,0x2000);
- outp(0x47C,0x1);
-
- i=0;
- while(i<1000000 && ((inp(0x47C) & 0x80) != 0)) i++;
-
- outp(0x47D,0x11);
- outpw(0x47A,0x2010);
-
- i = inp(0x47C) & 0x7f;
- outp(0x47C,i);
- outp(0x47C,0);
- outp(0x47C,0x80);
- outp(0x47E,0);
- outp(0x47F,0);
-
-
- outpw(0x47A,0x2011);
- outp(0x47F,9);
- outp(0x47C,0);
- outp(0x47D,0x80);
-
- outpw(0x47A,0x2020);
- outpw(0x47C,0xfb4);
-
- outpw(0x47A,0x2022);
- outpw(0x47C,0x137);
-
- outpw(0x47A,0x2023);
- outpw(0x47C,0x7ff);
-
- outpw(0x47A,0x2024);
- outpw(0x47C,0xfef);
-
- outpw(0x47A,0x2026);
- outpw(0x47C,0x7ff);
-
- outpw(0x47A,0x2027);
- outpw(0x47C,0x14);
-
- outpw(0x47A,0x2028);
- outpw(0x47C,0x26b);
-
- outpw(0x47A,0x2029);
- outpw(0x47C,0x8);
-
- outpw(0x47A,0x202A);
- outpw(0x47C,0xE8);
-
- outpw(0x47A,0x202B);
- outpw(0x47C,0x2);
-
- outpw(0x47A,0x202C);
- outpw(0x47C,0x2);
-
- outpw(0x47A,0x202D);
- outpw(0x47C,0x200);
-
- outpw(0x47A,0x2010);
- i = inp(0x47E) | 1;
- outpw(0x47E,i);
- }
- *****************/
- int video_flg;
- void VC_on()
- {
- if (vc3_check()) return;
- if (vbus_check()) reset_vbus();
-
- EGB_writePage(work,1);
- EGB_displayStart(work,0,512,32);
- set_high(0,2);
- EGB_writePage(work,0);
- video_flg = 1;
- }
- void VC_off()
- {
- if (vbus_check()) reset_vbus();
- EGB_writePage(work,1);
- EGB_color(work,1,0);
- EGB_clearScreen(work);
- EGB_writePage(work,0);
- video_flg = 0;
- }
-